%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%$Id: vpp.sty,v 1.18 2006/03/15 23:56:40 vdmtools Exp $
% @(#)vpp.sty   1.4 (C++): LaTeX style for VDM++, (c) Cap Volmac 94/12/21
%
% Contact: afrodite@capints.uucp
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\typeout{VDM++ style option <00/07/19> version 1.6}
\RequirePackage{vdmsl-2e}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definition of VDM++ keywords.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\makeNewKeyword{\kAct}{\#act }
\makeNewKeyword{\kActive}{\#active }
\makeNewKeyword{\kAll}{all}
\makeNewKeyword{\kAssumption}{assumption }
\makeNewKeyword{\kClass}{class }
\makeNewKeyword{\kDel}{del }
\makeNewKeyword{\kDelay}{delay }
\makeNewKeyword{\kDuration}{duration }
\makeNewKeyword{\kCycles}{cycles }
\makeNewKeyword{\kEffect}{effect }
\makeNewKeyword{\kFin}{\#fin }
\makeNewKeyword{\kGeneral}{general }
\makeNewKeyword{\kInput}{input }
\makeNewKeyword{\kInstanceVarDef}{instance variables }
\makeNewKeyword{\kINYS}{is not yet specified}
\makeNewKeyword{\kISO}{is subclass of }
\makeNewKeyword{\kIsofbaseclass}{isofbaseclass}
\makeNewKeyword{\kIsofclass}{isofclass}
\makeNewKeyword{\kISR}{is subclass responsibility}
\makeNewKeyword{\kMutex}{mutex}
\makeNewKeyword{\kNew}{new}
\makeNewKeyword{\kObjectstate}{objectstate }
\makeNewKeyword{\kPer}{per }
\makeNewKeyword{\kPeriodic}{periodic }
\makeNewKeyword{\kReq}{\#req }
\makeNewKeyword{\kSamebaseclass}{samebaseclass}
\makeNewKeyword{\kSameclass}{sameclass}
\makeNewKeyword{\kSelf}{self}
\makeNewKeyword{\kStart}{start}
\makeNewKeyword{\kStartlist}{startlist }
\makeNewKeyword{\kSync}{sync }
\makeNewKeyword{\kTimePost}{time post }
\makeNewKeyword{\kThreadDef}{thread }
\makeNewKeyword{\kTopology}{topology}
\makeNewKeyword{\kWaiting}{\#waiting }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Redefinitions of macros/environments in vdmsl.sty that contain bugs or are
% not adequate to be used in vpp.sty.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%
% Redefinition of `\const' to ensure a proper treatment of '_'.
%

%Removed LTO \def\const#1{\hbox{$\ConstantFont #1$\/}}

%
% Redefinition of `\return'; it causes a lot of unwanted white space in
% some circumstances in its original version.
%

\def\return#1{\@expl@Def\kw@indent{return }\ifmmode#1\else$#1$\fi\sub@kw@indent{return }}

%
% Redefinition of `\inv' in vdmsl.sty to add some indentation when the 
% invariant follows a type definition.
%

\def\inv#1#2{\add@indent{\w@IIndent}\hspace{\w@IIndent}\invfn{#1}#2\ignorespaces\endinvfn\sub@indent{\w@IIndent}}

%
% Redefinition of the keyword `undefined' to avoid the generation of 
% undesired white space after the keyword.
%

\@mNK\Undefined{undefined}

%
% Redefinition of `\blockstmt'.
%

\def\@hardlf{\par\relax\leavevmode\lnout@oi}
\newdimen\@rbl\setbox\tmp@box=\hbox{$\strut(\strut$}\@rbl=\wd\tmp@box\relax
\def\blockstmt{\@expl@Def\add@indent{\w@IIndent}\add@indent{\@rbl}\Lp\ignorespaces\hspace{\w@IIndent}}
\def\endblockstmt{\ignorespaces\sub@indent{\w@IIndent}\sub@indent{\@rbl}\sub@indent{\@rbl}\\\Rp\ignorespaces\add@indent{\@rbl}}

%
% Redefinition of `\@compr@expr' to avoid generation of the (default) predicate
% `true' with the macros `\setcomp', `\seqcomp' and `\mapcomp'.
%

\def\@compr@expr#1#2]{\add@DI \ifx #2\printtrue\else\Dot\strut #1#2\fi\sub@DI\sub@DI\@rb@sb\endgroup}

%
% Redefinition of `\such' to avoid unnecessary generation of the default
% predicate `true' with the original macro. See also the section on known
% bugs in the manual. The old macro is available as `\@such'.
%

\let\@such=\such
\def\such#1#2{\ifx #2\printtrue{\@such{#1}}\else{\@such{#1}[#2]}\fi}

%
% Redefinition of def-statement (and def-expression) to reflect the current
% VDM-SL syntax.
%

\def\semicolonAM@bls{\ifmmode\semicolonIM@bls\else\semicolonMM@bls\fi}
\def\semicolonIM@bls{\let\M@bl@one=\@empty\let\M@bl@two=\@empty
  \let\F@bl@cl=\F@semicolon@linebr}
\def\semicolonMM@bls{\let\M@bl@one=$\let\M@bl@two=$%
  \let\F@bl@cl=\F@semicolon@pl}
\def\F@semicolon@pl{%
        \ifpunct@set@it@
                \global\punct@set@it@false
                \@par@linebr
        \else
                \ifFirst@ 
                        \global\First@false 
                \else
                        ;%
                        \@par@linebr
                \fi
        \fi}
\def\F@semicolon@linebr{%
        \ifpunct@set@it@
                \global\punct@set@it@false
                \@linebr
        \else
                \ifFirst@ 
                        \global\First@false 
                \else;%
                     \@linebr 
                \fi
        \fi}
\def\@defstmt{\def\@sep{=}\First@true\let\eqdef=\F@bls\semicolonAM@bls
  \kw@indent{def }\ignorespaces}
\def\enddefstmt{\sub@kw@indent{def }\ \kIn}
\def\defexpr{\defstmt}
\def\enddefexpr{\enddefstmt}

%
% Redefinition of `\Gmap'.
%

\def\Gmap{\buildrel m \over \To}

%
% Redefinition of `\ind@by' in vdmsl.sty to avoid generation of LaTeX code
% for `by 1' in index-for loops.
%

%\def\ind@by#1]{\ifnum#1=1\else{\kw@indent{by }#1\sub@kw@indent{by }}\fi$\@Do}

%
% Redefinition of `\pre' and `\post' in vdmsl.sty.
%

\def\pre#1{\ifx #1\printtrue\@ignorespaces\else\kw@indent{pre }\ifmmode#1\else$#1$\@ignorespaces\sub@kw@indent{pre }\\\fi\fi}
\def\post#1{\kw@indent{post
}\ifmmode#1\else$#1$\fi\@ignorespaces\sub@kw@indent{post }}

%
% Redefinition of `\endexceptions' in vdmsl.sty to add some indentation before
% the `[' of the enclosing topology or specification statement.
%

\def\endexceptions{\ \sub@kw@indent{errs }\@ignorespaces}

\def\@fnsemicolon{%
      \ifpunct@set@it@
           \global\punct@set@it@false
      \else
           \iffn@in@let@
                \@comma
           \else
                \@fncustomcolon
           \fi
      \fi}

\def\@fncustomcolon{%
        \ifpunct@set@it@
                \global\punct@set@it@false
        \else
                \ifDef@% 
                        \ifFirstDef@% 
                                \global\FirstDef@false%
                        \else%
                                ;%
                                \@linebr
                        \fi%
                \else% 
                        \vdm% 
                \fi
        \fi}              

\def\op{%
  \@fncustomcolon\let\e@parms=\e@op@parms
  \@ifoptarg{\@if@i@e{\@op}{\@op}}{\Implicit@true\@op}}

%
% redefinition of `\@@ext', `\@externals' and `\endexternals'.
%

\def\@@ext#1#2:#3\\{\F@linebr
  \hbox to \wi@wr{#1\hss}\add@indent\wi@wr
  \if#3''{\b@id@indent{}{#2}#3\e@id@indent}\else{\b@id@indent{:}{#2}#3\e@id@indent}\fi
  \sub@indent\wi@wr\@rd@wr}
\def\@externals{\kw@indent{ext }\First@true$\@rd@wr}
\def\endexternals{$\sub@kw@indent{ext }\\\@ignorespaces}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% New definitions.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%
% Class environment
%

\def\indinh#1{[#1]}
\@newSkips{Class}{2ex plus .5ex minus .3ex}{2ex plus .5ex minus .3ex}
\@emptyHooks{Class}
\def\class{\@ifoptarg\@class\@smplclass}
\def\@smplclass#1{
   \global\wi@indent=\z@
\def\endclass{\leavevmode\sub@indent{\w@Indent}\lnout@\\ \kEnd $#1$%
   \e@Macro\postClassHook\postClassSkip}
   \b@Macro\preClassSkip\preClassHook\lnout@m
   \kClass $#1$
   \add@indent{\w@Indent}\def\ei@module{\sub@indent{\w@Indent}}}
\def\@class#1]#2{
   \global\wi@indent=\z@
\def\endclass{\leavevmode\sub@indent{\w@Indent}\lnout@\\ \kEnd $#2$%
   \e@Macro\postClassHook\postClassSkip}
   \b@Macro\preClassSkip\preClassHook\lnout@m
   \kClass $#2$ \if{#1}{no}\else{\kISO }$#1$\fi
   \add@indent{\w@Indent}\def\ei@module{\sub@indent{\w@Indent}}}

%
% Inheritance
%

\@newSkips{InhDef}{1ex plus .3ex minus .2ex}{1.75ex plus .4ex minus .2ex}
\@emptyHooks{InhDef}
\def\inhdef{\@ifoptarg\@inhdef{\@inhdef\w@IIndent]}}
\def\@inhdef#1]{\Def@true\FirstDef@true
  \b@Kw@II{inherit}{\preInhDefSkip}{\preInhDefHook}{#1}}
\def\endinhdef{\e@Kw@II\postInhDefHook\postInhDefSkip}
\def\inherit#1#2{\@semicolon\@hardlf\kFrom #1$\Dcolon$ \ifx #2\all\kAll\@ignorespaces\else#2\fi}

%
% Instance variables
%

\@newSkips{InstVar}{1ex plus .3ex minus .2ex}{1.75ex plus .4ex minus .2ex}
\@emptyHooks{InstVar}
\def\instvar{\@ifoptarg{\@instvar}{\@instvar\w@IIndent]}}
\def\@instvar#1]{\Def@true\FirstDef@true
  \b@Kw@II{instance variables}\preInstVarSkip\preInstVarHook{#1}}
\def\endinstvar{\e@Kw@II\postInstVarHook\postInstVarSkip}
\@emptyHooks{VarDcl}
\@newSkips{VarDcl}{0ex}{0ex}
\def\vardcl{\b@vardcl \setw@id\@vardcl}
\def\@vardcl#1{\@iflinebr{\nl@vardcl{#1}}{\sl@vardcl{#1}}}
\def\sl@vardcl#1#2{\ifx \Inyd #2 \b@id@indent{}{#1}#2%
  \else \b@id@indent{:}{#1}#2\fi \e@id@indent \e@vardcl}
\def\nl@vardcl#1#2{%
  \ifx #2\Inyd #1\else#1 :\fi\add@DI\\#2\sub@DI\e@vardcl}
\def\b@vardcl{\begingroup \@semicolon \b@Macro\preVarDclSkip\preVarDclHook\lnout@oi $}
\def\e@vardcl{$\ifDef@ \postVarDclHook%
  \else \e@Macro\postVarDclHook\postVarDclSkip\fi\endgroup\ignorespaces}
\@emptyHooks{InstInit}
\@newSkips{InstInit}{0ex}{0ex}
\def\instinit{\b@instinit \setw@id\@instinit}
\def\@instinit#1{\@iflinebr{\nl@instinit{#1}}{\sl@instinit{#1}}}
\def\sl@instinit#1#2{\kInit \ifx\Inyd #2\b@id@indent{}{#1}#2%
  \else\b@id@indent{\Fdef}{#1}#2\fi \e@id@indent \e@instinit}
\def\nl@instinit#1#2{%
  \kInit \ifx #2\Inyd #1\else#1 \Fdef \fi\add@DI\\#2\sub@DI\e@instinit}
\def\b@instinit{\begingroup \@semicolon \b@Macro\preInstInitSkip\preInstInitHook\lnout@oi $}
\def\e@instinit{$\ifDef@ \postInstInitHook%
  \else \e@Macro\postInstInitHook\postInstInitSkip\fi\endgroup\ignorespaces}


%new instinv: VDM++ language adjustment 980903
\@emptyHooks{instInvfn}
\@newSkips{instInvfn}{1ex plus .3ex minus .2ex}{1.75ex plus .4ex minus .2ex}
\def\instinv#1{\instinvfn#1\endinstinvfn}
\def\instinvfn{%
  $\kw@indent{inv } }
\def\endinstinvfn{\sub@kw@indent{inv }$\@ignorespaces\@par@linebr%
}

\def\issubclassresp{\@expl@Def$\kw@indent{is subclass responsibility}\sub@kw@indent{is subclass responsibility}$}


%old instinv \@emptyHooks{InstInv}
%old instinv \@newSkips{InstInv}{0ex}{0ex}
%old instinv \def\instinv{\b@instinv \setw@id\@instinv}
%old instinv \def\@instinv#1{\@iflinebr{\nl@instinv{#1}}{\sl@instinv{#1}}}
%old instinv \def\sl@instinv#1#2{\kInv \ifx \Inyd #2 \b@id@indent{}{#1}#2%
%old instinv   \else \b@id@indent{\Fdef}{#1}#2\fi \e@id@indent \e@instinv}
%old instinv \def\nl@instinv#1#2{%
%old instinv   \kInv \ifx #2\Inyd #1\else#1 \Fdef \fi\add@DI\\#2\sub@DI\e@instinv}
%old instinv \def\b@instinv{\begingroup \@semicolon \b@Macro\preInstInvSkip\preInstInvHook\lnout@oi $}
%old instinv \def\e@instinv{$\ifDef@ \postInstInvHook%
%old instinv   \else \e@Macro\postInstInvHook\postInstInvSkip\fi\endgroup\ignorespaces}
%old instinv 


%
% Method environment
%

\@newSkips{MethDef}{1ex plus .3ex minus .2ex}{1.75ex plus .4ex minus .2ex}
\@emptyHooks{MethDef}
\def\methdef{\@ifoptarg\@methdef{\@methdef\w@IIndent]}}
\def\@methdef#1]{\Def@true\FirstDef@true
\global\First@true%
  \b@Kw@II{methods}{\preMethDefSkip}{\preMethDefHook}{#1}}
\def\endmethdef{\e@Kw@II\postMethDefHook\postMethDefSkip}

%
% Methods
%

\def\methvalue#1{\ \kValue\ifmmode#1\else$#1$\fi}
\@newSkips{Method}{0ex}{0ex}
\@emptyHooks{Method}
\newtoks\t@fnop@name
\newif\ifSignatured@            \Signatured@false
\newif\ifImplicit@              
\newif\ifSignature@             \Signature@false
\def\method{\op}
\def\endmethod{\endop}

%
% Preliminary method definition; definition of `\Inys' and `\Iscr'.
%

\def\Inys{\kINYS}
\def\Iscr{\kISR}

%
% VDM++ dedicated expressions; definition of `\isofclass', `\isofbaseclass',
% `\sameclass' and `\samebaseclass'.
%

\def\isofclass#1#2{\expex{\kIsofclass}{#1, #2}}
\def\isofbaseclass#1#2{\expex{\kIsofbaseclass}{#1, #2}}
\def\sameclass#1#2{\expex{\kSameclass}{#1, #2}}
\def\samebaseclass#1#2{\expex{\kSamebaseclass}{#1, #2}}

%
% Specification statement; definition of the `specification' environment.
%

\newdimen\@sbl\setbox\tmp@box=\hbox{$\strut[\strut$} \@sbl=\wd\tmp@box\relax
\def\specification{\@expl@Def\add@indent{\@sbl}\add@indent{\@sbl}[}
\def\endspecification{\@ignorespaces\sub@indent{\@sbl}\sub@indent{\@sbl}]}

%
% Topology statement; definition of the `topology' environment.
%

\newdimen\@topology\setbox\tmp@box=\hbox{$\strut\kTopology\ \strut$}\@topology=\wd\tmp@box\relax
\def\topology{\@expl@Def\add@indent{\@topology}\kTopology}
\def\endtopology{\@ignorespaces\sub@indent{\@topology}}

%
% Method invocation; definition of `\invoke'.
%

\def\invoke#1#2{\ifx{#1}{self}\kSelf \else\ifmmode#1\else$#1$\fi\fi%
!%
\ifx{#2}{new}\kNew \else\ifx{#2}{start}\kStart \else\ifmmode#2\else$#2$\fi\fi\fi}

%
% Definition `\self'.
%

\def\self{\kSelf}

\def\mutex#1{\@hardlf\kMutex($#1$)}

%
% New expression; definition `\new'.
%

%\def\new#1{{\kNew{\kw{ }}#1 ()}}
\def\new#1{{\kNew{\kw{ }}#1 }} % modify for Constructors. They have arguments.

%
% Start statement; definition of `\start'.
%

\def\start#1{{\kStart}(#1)}

%
% Startlist statement; definition `\startlist'.
%

\def\startlist#1{\kStartlist $#1$}

%
% Delay statement; definition `\delay'.
%

\def\delay#1{\kDelay ($#1$)}

%
% Duration statement; definition `\duration'.
%

\def\duration#1#2{\kDuration ($#1$) #2}

%
% Cycles statement; definition `\cycles'.
%

\def\cycles#1#2{\kCycles ($#1$) #2}

%
% Synchronisation constraints; definition of `syncdef' environment.
%

\@newSkips{SyncDef}{1ex plus .3ex minus .2ex}{1.75ex plus .4ex minus .2ex}
\@emptyHooks{SyncDef}
\def\syncdef{\@ifoptarg\@syncdef{\@syncdef\w@IIndent]}}
\def\@syncdef#1]{\Def@true\FirstDef@true
  \b@Kw@II{sync}{\preSyncDefSkip}{\preSyncDefHook}{#1}}
\def\endsyncdef{\e@Kw@II\postSyncDefHook\postSyncDefSkip}

%
% Permission predicate; definitions of `\per', `\act', `\active', `\fin',
% `\req' and `\waiting'.
%

\def\per#1#2{\@hardlf\kPer $#1 \Implies #2$}
\def\act#1{\expex{\kAct}{#1}}
\def\actminusfin#1{\expex{\kActive}{#1}}
\def\fin#1{\expex{\kFin}{#1}}
\def\req#1{\expex{\kReq}{#1}}
\def\reqminusact#1{\expex{\kWaiting}{#1}}

%
% Threads; definition of `threaddef' and 'thread' environments.
%

\@newSkips{Thread}{1ex plus .3ex minus .2ex}{1.75ex plus .4ex minus .2ex}
\@emptyHooks{Thread}
\def\threaddef{\@ifoptarg{\@threaddef}{\@threaddef\w@IIndent]}}
\def\@threaddef#1]{\Def@true\FirstDef@true
 \b@Kw@II{thread}{\preThreadSkip}{\preThreadHook}{#1}}
\def\endthreaddef{\e@Kw@II\postThreadHook\postThreadSkip}

\@newSkips{Thread}{2ex plus .4ex minus .2ex}{2ex plus .4ex minus .2ex}
\@emptyHooks{Thread}
\def\thread{\@ifoptarg{\@thread}{\@thread{0ex}]}}
\def\@thread#1]{
  \add@indent{#1}\relax
  \def\endthread{\sub@indent{#1}\e@Macro\postThreadHook\postThreadSkip}
  \parindent=\z@ \let\par=\@@par%
  \vdm%
  \b@Macro\preThreadSkip\preThreadHook\lnout@
  \ignorespaces}

%
% Periodic obligation; definition of `\periodic'.
%

%\def\periodic#1#2{\F@comma\@linebr\kPeriodic \pex{#1}\pex{#2}}
\def\periodic#1#2{\@hardlf\kPeriodic \pex{#1}\pex{#2}\@linebr}

%
% Real-time
%

\@newSkips{TimePost}{1ex plus .3ex minus .2ex}{1.75ex plus .4ex minus .2ex}
\@emptyHooks{TimePost}
\@newSkips{TimeVar}{1ex plus .3ex minus .2ex}{1.75ex plus .4ex minus .2ex}
\@emptyHooks{TimeVar}
\def\timepost#1{\kw@indent{time post }\ifmmode#1\else$#1$\fi\@ignorespaces\sub@kw@indent{time post }}
\def\Approx{\approx}
\def\timevar{\@ifoptarg{\@timevar}{\@timevar\w@IIndent]}}
\def\@timevar#1]{\Def@true\FirstDef@true
  \b@Kw@II{time variables}\preTimeVarSkip\preTimeVarHook{#1}}
\def\endtimevar{\e@Kw@II\postTimeVarHook\postTimeVarSkip}
\@emptyHooks{TimeVarDcl}
\@newSkips{TimeVarDcl}{0ex}{0ex}
\def\timevardcl{\b@timevardcl \setw@id\@timevardcl}
\def\@timevardcl#1{\@iflinebr{\nl@timevardcl{#1}}{\sl@timevardcl{#1}}}
\def\sl@timevardcl#1#2{\ifx \Inyd #2 \b@id@indent{}{#1}#2%
  \else \b@id@indent{:}{#1}#2\fi \e@id@indent \e@timevardcl}
\def\nl@timevardcl#1#2{%
  \ifx #2\Inyd #1\else#1 :\fi\add@DI\\#2\sub@DI\e@timevardcl}
\def\b@timevardcl{\begingroup \@semicolon \b@Macro\preTimeVarDclSkip\preTimeVarDclHook\lnout@oi $}
\def\e@timevardcl{$\ifDef@ \postTimeVarDclHook%
  \else \e@Macro\postTimeVarDclHook\postTimeVarDclSkip\fi\endgroup\ignorespaces}
\@emptyHooks{Assumption}
\@newSkips{Assumption}{0ex}{0ex}
\def\assumption{\b@assumption \setw@id\@assumption}
\def\@assumption#1{\@iflinebr{\nl@assumption{#1}}{\sl@assumption{#1}}}
\def\sl@assumption#1#2{\kAssumption \ifx\Inyd #2\b@id@indent{}{#1}#2%
  \else\b@id@indent{\Fdef}{#1}#2\fi \e@id@indent \e@assumption}
\def\nl@assumption#1#2{%
  \kAssumption \ifx #2\Inyd #1\else#1 \Fdef \fi\add@DI\\#2\sub@DI\e@assumption}
\def\b@assumption{\begingroup \@semicolon \b@Macro\preAssumptionSkip\preAssumptionHook\lnout@oi $}
\def\e@assumption{$\ifDef@ \postAssumptionHook%
  \else \e@Macro\postAssumptionHook\postAssumptionSkip\fi\endgroup\ignorespaces}
\@emptyHooks{Effect}
\@newSkips{Effect}{0ex}{0ex}
\def\effect{\b@effect \setw@id\@effect}
\def\@effect#1{\@iflinebr{\nl@effect{#1}}{\sl@effect{#1}}}
\def\sl@effect#1#2{\kEffect \ifx \Inyd #2 \b@id@indent{}{#1}#2%
  \else \b@id@indent{\Fdef}{#1}#2\fi \e@id@indent \e@effect}
\def\nl@effect#1#2{%
  \kEffect \ifx #2\Inyd #1\else#1 \Fdef \fi\add@DI\\#2\sub@DI\e@effect}
\def\b@effect{\begingroup \@semicolon \b@Macro\preEffectSkip\preEffectHook\lnout@oi $}
\def\e@effect{$\ifDef@ \postEffectHook%
  \else \e@Macro\postEffectHook\postEffectSkip\fi\endgroup\ignorespaces}

%
% Definition of `\name', `\charlit' and `\textlit'.
%

% removed by LTO
%\catcode`\_=13
%\def_{\sb}
%\def\name{\hbox\bgroup\def_{\_}\@name}
%\def\@name#1{\ifmmode#1\else$#1$\@ignorespaces\fi\egroup}
%\def\charlit{\hbox\bgroup\def_{\_}\@charlit}
%\def\@charlit#1{\Quote{\MathTextFont#1\/}\Quote\egroup}
%\def\textlit{\hbox\bgroup\def_{\_}\@textlit}
%\def\@textlit#1{\Dquote{\MathTextFont#1\/}\Dquote\egroup}

%
% Definition of `\printtrue' and `\printfalse' to correctly print the boolean
% literals true and false.
%

\def\printtrue{\True}
\def\printfalse{\False}

%
% Definition of `\Tto' (symbol to indicate total function types).
%

\def\Tto{\stackrel{t}{\To}}

%
% Default values
%

\setlength{\preAssumptionSkip}{0ex}
\setlength{\postAssumptionSkip}{2ex}
\setlength{\preClassSkip}{2ex}
\setlength{\postClassSkip}{2ex}
\setlength{\preEffectSkip}{0ex}
\setlength{\postEffectSkip}{2ex}
\setlength{\preInhDefSkip}{2ex}
\setlength{\postInhDefSkip}{0ex}
\setlength{\preValuesdefSkip}{2ex}
\setlength{\postValuesdefSkip}{0ex}
\setlength{\preValueSkip}{0ex}
\setlength{\postValueSkip}{0ex}
\setlength{\preTypesdefSkip}{2ex}
\setlength{\postTypesdefSkip}{0ex}
\setlength{\preTypeSkip}{0ex}
\setlength{\postTypeSkip}{0ex}
\setlength{\preInstVarSkip}{2ex}
\setlength{\postInstVarSkip}{0ex}
\setlength{\preInvfnSkip}{0ex}
\setlength{\postInvfnSkip}{0ex}
\setlength{\preInitfnSkip}{2ex}
\setlength{\preMethDefSkip}{2ex}
\setlength{\postMethDefSkip}{0ex}
\setlength{\preMethodSkip}{0ex}
\setlength{\postMethodSkip}{0ex}
\setlength{\preOperdefSkip}{2ex}
\setlength{\postOperdefSkip}{0ex}
\setlength{\preOpSkip}{0ex}
\setlength{\postOpSkip}{0ex}
\setlength{\preSyncDefSkip}{2ex}
\setlength{\postSyncDefSkip}{0ex}
\setlength{\preThreadSkip}{2ex}
\setlength{\postThreadSkip}{0ex}
\setlength{\preFuncdefSkip}{2ex}
\setlength{\postFuncdefSkip}{0ex}
\setlength{\preFnSkip}{0ex}
\setlength{\postFnSkip}{0ex}
\setlength{\prePrecondSkip}{0ex}
\setlength{\prePostcondSkip}{0ex}
\setlength{\preTimePostSkip}{0ex}
\setlength{\postTimePostSkip}{0ex}
\setlength{\preTimeVarSkip}{2ex}
\setlength{\postTimeVarSkip}{0ex}
\setlength{\preTimeVarDclSkip}{0ex}
\setlength{\postTimeVarDclSkip}{0ex}
\setlength{\postSignatureSkip}{0ex}
\setlength{\preExceptionsSkip}{0ex}
\nolinenumbering

%
% Instance variables assigndef
%
\def\F@semicolon@pl{%
        \ifpunct@set@it@
                \global\punct@set@it@false
                \@par@linebr
        \else
                \ifFirst@ 
                        \global\First@false 
                \else
                        ;%
                        \@par@linebr
                \fi
        \fi}

\def\parlinebr{\@par@linebr}

\def\insvar{\@expl@Def\setw@bl{\@insvar}}
\def\endinsvar{;\@par@linebr}
\def\@insvar{\First@true\def\@sep{:}\MM@bls
  \ignorespaces}

\def\instinit#1{\F@semicolon@pl\t@bl@one={#1}$\@iflinebr{\ml@instinit}{\sl@instinit}}
\def\sl@instinit#1{\let\ei@instinit=\e@bl\b@bl#1\add@DI
  \@iflinebrarg{\Ass\\\arg@instinit}{\e@instinit}{\Ass\arg@instinit}{\e@instinit}}
\def\ml@instinit#1{\m@bl\add@DI\let\ei@instinit=\sub@DI\\#1\add@DI
  \@iflinebrarg{\Ass\\\arg@instinit}{\e@instinit}{\Ass\arg@instinit}{\e@instinit}}
\def\arg@instinit#1]{#1\e@instinit}
\def\e@instinit{\ei@instinit\sub@DI$\ignorespaces}


